package com.spzx.channel.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.spzx.channel.service.IItemService;
import com.spzx.common.core.constant.SecurityConstants;
import com.spzx.common.core.domain.R;
import com.spzx.product.api.SpzxService;
import com.spzx.product.api.domain.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author ChenXing
 * @Description
 * @Create 2024/8/9 15:49
 */

@Service
public class ItemServiceImpl implements IItemService {

    @Autowired
    private SpzxService spzxService;

    @Override
    public ItemVo item(Long skuId) {

        // 自己还是老实在在的一条一条写吧，边写边测试

        // 1.productSku  传进来的skuId 就是数据表中 product_sku 的 id  直接根据 id 查即可

        R<ProductSku> productSku = spzxService.getProductSku(skuId, SecurityConstants.INNER);

        // 2.product    product_sku 表中有 product_id 直接关联查询

        R<Product> product = spzxService.getProduct(skuId, SecurityConstants.INNER);

        // 3.skuPrice  skuPrice 里的信息 在 product_sku 表中有 可以直接去赋值

        R<SkuPrice> skuPrice = spzxService.getSkuPrice(skuId, SecurityConstants.INNER);

        // 4. sliderUrlList  product表里面 slider_urls 的集合 第二步已经查询到 product 直接用即可

        // 5. detailsImageUrlList 查这个需要先把  product_detail 先查出来
        R<ProductDetails> productDetails = spzxService.getProductDetails(skuId, SecurityConstants.INNER);

        // 6 specValueList 直接在 product 里面有

        // 7 skuStockVo sku_stock表里包含了 skuStockVo  所需要的内容

        R<SkuStockVo> skuStockVo = spzxService.getSkuStockVo(skuId, SecurityConstants.INNER);

        // 8 skuSpecValueMap   product_sku 表里的 sku_spec 为 key 表里的 id 为 value,针对当前 product 里面的所有 sku
        // 思路，先得到 product _ sku 集合
        Long id = product.getData().getId();
        R<List<ProductSku>>   productSkuList = spzxService.getProductSkuList(id, SecurityConstants.INNER);
        List<ProductSku> productSkus = productSkuList.getData();
        Map<String,Long> specToSkuIdMap = new HashMap<>();
        for (ProductSku item: productSkus) {
            specToSkuIdMap.put(item.getSkuSpec(),item.getId());
        }



        ItemVo itemVo = new ItemVo();
        itemVo.setProductSku(productSku.getData());
        itemVo.setProduct(product.getData());
        itemVo.setSkuPrice(skuPrice.getData());
        itemVo.setSliderUrlList(Arrays.asList(product.getData().getSliderUrls().split(",")));
        itemVo.setDetailsImageUrlList(Arrays.asList(productDetails.getData().getImageUrls().split(",")));
        itemVo.setSpecValueList(JSONArray.parse(product.getData().getSpecValue()));
        itemVo.setSkuStockVo(skuStockVo.getData());
        itemVo.setSkuSpecValueMap(specToSkuIdMap);

        return itemVo;
    }


}
